import requestCodeTips from './codeTips.js';
import config from '@/common.js';
const { BASE_URL } = config;

const http = {
  // 请求方法
  request (config) {
    // config：请求配置对象，具体参照uniapp文档
    config = beforeRequest(config);

    // 异步请求
    return new Promise((resolve, reject) => {
      uni
        .request(config)
        .then((res) => {
          // 成功
          // 响应拦截
          const response = beforeResponse(res);
          resolve(response);
        })
        .catch((err) => {
          // 失败
          errorHandle(err);
          reject(err);
        });
    });
  },
  get (baseUrl = BASE_URL, url, data, auth = false) {
    /*
    url：接口地址
    data：查询参数
    auth：请求是否携带token进行认证（true/false）
    method：请求方式
    */
    return this.request({
      url: baseUrl + url,
      data,
      auth,
      timeout: 10000,
      method: 'GET'
    });
  },
  post (baseUrl = BASE_URL, url, data, auth = false) {
    /*
    url：接口地址
    data：请求体参数
    auth：请求是否携带token进行认证（true/false）
    method：请求方式
    */
    return this.request({
      url: baseUrl + url,
      data,
      auth,
      timeout: 10000,
      method: 'POST'
    });
  },
  put (baseUrl = BASE_URL, url, data, auth = true) {
    /*
    url：接口地址
    data：请求体参数
    auth：请求是否携带token进行认证（true/false）
    method：请求方式
    */
    return this.request({
      url: baseUrl + url,
      data,
      auth,
      timeout: 10000,
      method: 'PUT'
    });
  },
  delete (baseUrl = BASE_URL, url, data, auth = true) {
    /*
    url：接口地址
    auth：请求是否携带token进行认证（true/false）
    method：请求方式
    */
    return this.request({
      url: baseUrl + url,
      auth,
      timeout: 10000,
      method: 'DELETE'
    });
  }
};

// 请求拦截器
const beforeRequest = (config) => {
  // 请求之前拦截操作
  if (config.auth) {
    // //  请求头中添加token
    // if (userInfo && userInfo.token) {
    //   // Authorization    Bearer   根据情况修改
    //   // config.header.Authorization = uni.getStorageSync('token');
    // } else {
    //   // 为登陆则跳转登陆 重定向
    //   uni.navigateTo({
    //     url: '/pages/login/index'
    //   });
    // }
  }
  return config;
};

// 响应拦截器
const beforeResponse = (response) => {
  // 请求之后操作
  if (response.statusCode !== 200 && response.statusCode !== 201 && response.statusCode !== 204) {
    // 给出对应的提示
    if (response.errMsg) {
      uni.showToast({
        // title: response.data.error.toString(),
        title: requestCodeTips(response.statusCode),
        icon: 'none',
        duration: 2000
      });
    }
  }
  return response.data;
};

// 请求异常处理器
const errorHandle = () => {
  uni.showToast({
    // title: response.data.error.toString(),
    title: '请求异常',
    icon: 'none',
    duration: 2000
  });
};

export default http;
